package com.roads.site.mapper;

import com.roads.site.domain.SiteLabourStaff;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 农民工花名册Mapper接口
 *
 * @author nhp
 * @date 2022-10-27
 */
public interface SiteLabourStaffMapper {

    /**
     * 根据主键ID查询详情
     *
     * @param id 劳务工花名册主键
     * @return 劳务工详情
     */
    SiteLabourStaff getModelById(Integer id);

    /**
     * 根据身份证号码和标段编号查询劳务工详情
     *
     * @param idNo            身份证号
     * @param institutionCode 标段编号
     * @return 劳务工详情
     */
    SiteLabourStaff getModelByIdNo(@Param("idNo") String idNo, @Param("institutionCode") String institutionCode);

    /**
     * 查询列表
     *
     * @param model 劳务工花名册
     * @return 劳务工集合
     */
    List<SiteLabourStaff> selectModelList(SiteLabourStaff model);

    /**
     * 根据id集合查询劳务工集合
     *
     * @param ids id 集合
     * @return 劳务工集合
     */
    List<SiteLabourStaff> selectModelListByIds(Integer[] ids);

    /**
     * 根据身份证号查询劳务工
     *
     * @param idNo 身份证号
     * @return 劳务工集合
     */
    List<SiteLabourStaff> selectModeListByIdNo(String idNo);

    /**
     * 查询所有劳务工信息
     *
     * @return 所有劳务工集合
     */
    List<SiteLabourStaff> selectModelListAll();

    /**
     * 劳务工下拉框
     *
     * @param institutionCode 标段编号
     * @param masterId        工资发放主表ID
     * @return 结果
     */
    List<SiteLabourStaff> dropDownListBySalary(@Param("institutionCode") String institutionCode, @Param("masterId") Integer masterId);

    /**
     * 根据标段查询劳务工信息
     *
     * @param institutionCode 标段编号
     * @return 劳务工集合
     */
    List<SiteLabourStaff> selectModelListByBid(String institutionCode);

    /**
     * 根据项目ID/状态查询劳务工数量
     *
     * @param projectId 项目ID
     * @param status 状态
     * @return 数量
     */
    int getStaffCountByProjectId(@Param("projectId")Integer projectId,@Param("status") String status);

    /**
     * 根据项目ID/用户/机构类型/状态查询劳务工数量
     *
     * @param projectId 项目ID
     * @param userName 用户
     * @param status 状态
     * @return 数量
     */
    int getStaffCountByProjectIdAndUser(@Param("projectId")Integer projectId,@Param("userName") String userName,@Param("status") String status);

    /**
     * 新增
     *
     * @param model 农民工花名册
     * @return 结果
     */
    int insert(SiteLabourStaff model);

    /**
     * 批量导入新增基本信息
     *
     * @param list 集合
     * @return 结果
     */
    int insertBatchBasicImport(List<SiteLabourStaff> list);

    /**
     * 批量导入更新基本信息
     *
     * @param list 集合
     * @return 结果
     */
    int updateBatchBasicImport(List<SiteLabourStaff> list);

    /**
     * 修改
     *
     * @param model 农民工花名册
     * @return 结果
     */
    int update(SiteLabourStaff model);

    /**
     * 删除
     *
     * @param id 农民工花名册主键
     * @return 结果
     */
    int delete(Integer id);

    /**
     * 批量删除
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteByIds(Integer[] ids);

    /**
     * 重置劳务工合同信息
     *
     * @param idNo 身份证号
     * @return 结果
     */
    int resetStaffContract(String idNo);

    /**
     * 同步劳务工合同信息
     *
     * @param idNo 身份证号
     * @param contractCode 合同编号
     * @param contractSigning 合同状态
     * @param contractStartExpiration 开始日期
     * @param contractEndExpiration 结束日期
     * @param contractSignDate 签订日期
     * @return 结果
     */
    int syncStaffContract(@Param("idNo") String idNo,
                          @Param("contractCode") String contractCode,
                          @Param("contractSigning") String contractSigning,
                          @Param("contractStartExpiration") Date contractStartExpiration,
                          @Param("contractEndExpiration") Date contractEndExpiration,
                          @Param("contractSignDate") Date contractSignDate);

    /**
     * 同步劳务工银行账户信息
     *
     * @param idNo        身份证号
     * @param bankAccount 银行卡号
     * @param bankName    银行名称
     * @param openBank    开户银行
     * @return 结果
     */
    int syncStaffBank(@Param("idNo") String idNo, @Param("bankAccount")
            String bankAccount, @Param("bankName") String bankName, @Param("openBank") String openBank);

    /**
     * 重置劳务工银行账户信息
     *
     * @param idNo 身份证号
     * @return 结果
     */
    int resetStaffBank(String idNo);

}
